/*
 * @Date: 2020-10-05 21:33:41
 * @Author: David
 * @LastEditors: OBKoro1
 * @LastEditTime: 2020-10-05 22:34:32
 * @FilePath: /huanyong-task-01-01/code/index2.js
 * @Description: 第二题
 * 
 * horsepower 马力
 * dollar_value 价格
 * in_stock 库存
 */
const fp = require('lodash/fp');

const cars = [{
    name: 'Ferrari FF',
    horsepower: 660,
    dollar_value: 700000,
    in_stock: true
},
{
    name: 'Spyker C12 Zagato',
    horsepower: 650,
    dollar_value: 648000,
    in_stock: false
},
{
    name: 'Jaguar XKR - S',
    horsepower: 550,
    dollar_value: 132000,
    in_stock: false
}, {
    name: 'Audi R8',
    horsepower: 525,
    dollar_value: 114200,
    in_stock: false
}, {
    name: 'Aston Martin One— 77',
    horsepower: 750,
    dollar_value: 1850000,
    in_stock: true
}, {
    name: 'Pagani Huayra',
    horsepower: 700,
    dollar_value: 1300000,
    in_stock: false
},
];

// 练习 1 ,获取 cars 最后一条数据的`in_stock`属性
const isLastInStock =  fp.flowRight(fp.prop('in_stock'),fp.last);

console.log('练习 1 => cars 最后一个car的`in_stock` 属性为:',isLastInStock(cars)); // log false

// 练习 2  使用 fp.flowRight、fp.prop、 fp.first 获取 cars 的第一个 car 的 name
const firstCarName = fp.flowRight(fp.prop('name'),fp.first);
console.log('练习 2 => cars 第一个car的`name`属性为:',firstCarName(cars)); // log false

// 练习 3  使用 帮助函数 _average 重构 averageDollerValue 使用 函数组合的方式实现
let _average = function (xs) {
    return fp.reduce(fp.add,0,xs) / xs.length;
}
// 先重新生成 一个只包含 dollar_value 值 的数组，再将作为参数传入 `_average`
const averageDollerValue = fp.flowRight(_average,fp.map(function (car) {
    return car.dollar_value;
   }))
console.log('练习 3 => 使用 帮助函数 _average 重构 averageDollerValue 得出总`dollar_value`:',averageDollerValue(cars))


/**
 *  练习 4 : 使用 flowRight 写一个 sanitizeNames() 函数，
 *  返回一个下划线连接的小写字符串，把数组中的 name 转换成这种形式： 
 *  sanitizeNames(['Hello World']) => ['hello_world']
 */
  
 let _underscore = fp.replace(/\W+/g,'_')
 // 先组合 字符串变成小写，并将其转化成指定格式的功能，再将其作为 map 的处理函数传入
// const sanitizeNames =  fp.map(fp.flowRight(_underscore,fp.lowerCase));
const sanitizeNames = fp.flowRight(fp.map,_underscore,fp.lowerCase); //更好的方式

 console.log('练习 4 => 传入字符数组，将其转化为指定格式:',sanitizeNames(['Hello World','I love lagou']))